/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jogo.da.velha;
import java.util.Scanner;

/**
 *
 * @author Guilherme Gaiardo
 */
public class MenuDaVelha {
    private int turnoJogador;
    private Jogador[] players;

    public MenuDaVelha() {
        this.turnoJogador = 0;
    }
    
    public void inicia(){
        System.out.println("Numero de jogadores: 1 ou 2?");
        int i, numJ, id = 1;
        Scanner entrada = new Scanner(System.in);
        numJ = entrada.nextInt();
        this.players = new Jogador[numJ];
        String nome;
        numJ = 2;
        for (i=0; i<numJ; i++)
        {
            System.out.println("Insira seu nome: ");
            nome = entrada.next();
            this.players[i] = new Jogador(id, nome);
            id++;
        }
    }

    public int getTurnoJogador() {
        return turnoJogador;
    }
    
    public void turno(Tabuleiro tab){
        System.out.println("Vez de: " + this.players[this.getTurnoJogador()%2].getNome());
        System.out.println("Menu\n1- Jogar\n2- Desistir\n3- Reset\n4- Sair");
        int op, x, y;
        Scanner entrada = new Scanner(System.in);
        op = entrada.nextInt();
        switch (op){
            case 1:
                System.out.println("Valor X.");
                x = entrada.nextInt();
                System.out.println("Valor Y.");
                y = entrada.nextInt();
                while (x < 0 || x > tab.getTam() || y < 0 || y > tab.getTam())
                {
                    System.out.println("Parametros bugados. Insira novamente onde quer marcar");
                    x = entrada.nextInt();
                    y = entrada.nextInt();
                }
                while (tab.marcaEm(x, y, this.players[this.getTurnoJogador()%2].getId()) == 0)
                {
                    System.out.println("Ja esta marcado esta posicao.");
                    System.out.println("Valor X.");
                    x = entrada.nextInt();
                    System.out.println("Valor Y.");
                    y = entrada.nextInt();
                }
                this.turnoJogador++;
                break;
            case 2:
                System.out.printf("%s desistiu.", this.players[getTurnoJogador()].getNome());
                tab.setaTabuleiro(tab.getTam());
                break;
            case 3:
                System.out.println("Reset.");
                tab.setaTabuleiro(tab.getTam());
                break;
            case 4:
                System.exit(0);
            default:
                System.out.println("Operacao invalida.");
                break;
        }
    }
    
    public void desenhaTabuleiro(Tabuleiro tab)
    {
        int i;
        System.out.printf("\n\n\n\n%c|%c|%c\n-----\n%c|%c|%c\n-----\n%c|%c|%c\n", this.decodPos(tab, 0, 0), this.decodPos(tab, 0, 1), this.decodPos(tab, 0, 2), this.decodPos(tab, 1, 0), this.decodPos(tab, 1, 1), this.decodPos(tab, 1, 2), this.decodPos(tab, 2, 0), this.decodPos(tab, 2, 1), this.decodPos(tab, 2, 2));
    }
    
    private char decodPos(Tabuleiro tab, int x, int y){
        switch (tab.getPosicoes(x, y)){
            case 0:
                return ' ';
            case 1:
                return 'O';
            case 2:
                return 'X';
            default:
                return '?';
        }
    }
    
    public void vitoria(int id){
        for (Jogador winner : this.players)
        {
            if (winner.getId() == id)
            {
                System.out.printf("\n\nVencedor: %s\n\n\n", winner.getNome());
                return;
            }
        }
    }
}